<?php

/*define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);*/
// 将配置文件的引入放在文件最顶部
require_once BASE_PATH.'/config.php';

class Database {
    private $link;
    private $dsn;

    public function __construct() {
        global $Db; // 获取全局 $Db 配置数组

        $this->dsn = sprintf(
            "mysql:host=%s;dbname=%s;port=%d;charset=utf8",
            $Db['DB_HOST'],
            $Db['DB_NAME'],
            $Db['DB_PORT']
        );
    }

    // 连接数据库（惰性连接）
    private function connect() {
        global $Db; // 获取全局 $Db 配置数组
        if (!$this->link) { // 只有在连接不存在时才建立连接
            try {
                $this->link = new PDO($this->dsn, $Db['DB_USER'], $Db['DB_PASS']);
                $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                throw new Exception("Database connection failed: " . $e->getMessage());
            }
        }
    }

    // 执行查询
    public function query($sql) {
        $this->connect(); // 确保连接已建立
        try {
            $stmt = $this->link->prepare($sql);
            $stmt->execute();
            return $stmt;
        } catch (PDOException $e) {
            throw new Exception("Query failed: " . $e->getMessage());
        }
    }

    // 获取单行数据
    public function getRow($sql) {
        $stmt = $this->query($sql);
        $res = $stmt->fetch(PDO::FETCH_ASSOC);
        if($res){
            return json_encode($res);
        }
        return null;
    }

    // 获取所有数据
    public function getAll($sql) {
        $stmt = $this->query($sql);
        $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if($res){
            return json_encode($res);
        }
        return null;
    }

    // 关闭连接
    public function close() {
        $this->link = null; // 释放 PDO 对象时会自动关闭连接
    }

    public function __destruct() {
        $this->close();
    }
}

/*// 创建 Database 类的实例
$db = new Database();

// 执行查询示例
try {
    // 这里的 SQL 查询可以根据你的需求调整
    $sql = "SELECT * FROM user where id = 11"; // 获取前 10 条用户记录
    $result = $db->getRow($sql); // 获取所有数据
    echo "Query Result: " . $result; // 输出查询结果
} catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage(); // 捕获异常并输出错误信息
}*/